Android: HttpClient POST: NullPointerException

1

Я новичок в разработке Android с момента покупки EVO несколько месяцев назад.

В любом случае, я разрабатываю свое первое приложение для Android, используя эмулятор Eclipse и Android SDK.

Я пытаюсь сделать простой HTTP POST. Мой реальный код имеет мою регистрационную информацию, жестко закодированную, поэтому я заменил ее тестовой информацией, и я изменил URL-адрес, чтобы просто POST на google.com.

Я получаю исключение NullPointerException при попытке просмотреть ответ запроса HTTP POST.

Я также добавил разрешения на доступ к моему манифестному файлу xml.

Вот мой код.

Editted

Заранее спасибо

:: обновлено::

Я инициализировал объект txtResult TextView, и я получаю новое исключение NullPointerException.


package com.dougi.TexAgsPremiumWidget;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TexAgsPremiumWidget extends Activity {

    LinearLayout layout = new LinearLayout(this);;
    TextView txtResult = new TextView(this);
    ProgressDialog pDialog;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        login();

        layout.addView(txtResult);
        setContentView(layout);

        pDialog = ProgressDialog.show(this, "Loading", "please wait...", true);
    }

    public void login()
    {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.google.com");

        try
        {
            List nameValuePairs = new ArrayList(2);
            nameValuePairs.add(new BasicNameValuePair("username", "test"));
            nameValuePairs.add(new BasicNameValuePair("password", "test"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            txtResult.setText(HttpHelper.request(response));
        } 

        catch (ClientProtocolException e)
        {
            Log.i("httpClientProtocolException", e.toString());
        }

        catch (IOException e)
        {
            Log.i("httpClientIOException", e.toString());
        }
    }
}

вот мой новый журнал ошибок logcat


08-22 20:57:40.153: ERROR/AndroidRuntime(960): ERROR: thread attach failed
08-22 20:57:40.883: ERROR/AndroidRuntime(966): Uncaught handler: thread main exiting due to uncaught exception
08-22 20:57:40.923: ERROR/AndroidRuntime(966): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.dougi.TexAgsPremiumWidget/com.dougi.TexAgsPremiumWidget.TexAgsPremiumWidget}: java.lang.NullPointerException
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.os.Looper.loop(Looper.java:123)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at java.lang.reflect.Method.invoke(Method.java:521)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at dalvik.system.NativeStart.main(Native Method)
08-22 20:57:40.923: ERROR/AndroidRuntime(966): Caused by: java.lang.NullPointerException
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.view.View.(View.java:1777)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.view.ViewGroup.(ViewGroup.java:279)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.widget.LinearLayout.(LinearLayout.java:88)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at com.dougi.TexAgsPremiumWidget.TexAgsPremiumWidget.(TexAgsPremiumWidget.java:25)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at java.lang.Class.newInstanceImpl(Native Method)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at java.lang.Class.newInstance(Class.java:1479)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
08-22 20:57:40.923: ERROR/AndroidRuntime(966):     ... 11 more

Теги:
httpclient
post
nullpointerexception

1 ответ

1
Лучший ответ

Для этого может быть слишком много причин, и если вы не сообщите нам, какая строка - номер 60, мы не сможем вам помочь. Во всяком случае... до сих пор я вижу явный случай NullpointerException: вы сначала вызываете login(), после чего вы инициализируете txtResult

login();
layout =  new LinearLayout(this);
txtResult = new TextView(this);

Это, конечно, вызовет NullpointerException, потому что внутри login() вы делаете:

txtResult.setText(HttpHelper.request(response));

В этом случае txtResult не были инициализированы, поэтому оно равно null.

Edit:

Sigh... do TextView txtResult = new TextView(this); вне любого метода вызовет другой NullpointerException. Это потому, что использование this. Вы лучше прочитаете немного о том, что это значит, но позвольте мне дать вам простое объяснение: this - это ключевое слово, используемое для ссылки на экземпляр объекта текущего объекта. Каждая инициализация, которую вы выполняете, которая не находится внутри метода, вызывается до того, как вызывается конструктор (который называется ленивой инициализацией), поэтому в этом случае объект не был создан и this будет null.

Что вам нужно сделать, и я подумал, что вы поймете, что идея:

layout =  new LinearLayout(this);
txtResult = new TextView(this);
login();
  • 0
    Я сделал обновление
  • 0
    Я также обновил свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню