Я новичок в разработке 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
Для этого может быть слишком много причин, и если вы не сообщите нам, какая строка - номер 60, мы не сможем вам помочь. Во всяком случае... до сих пор я вижу явный случай NullpointerException
: вы сначала вызываете login()
, после чего вы инициализируете txtResult
login();
layout = new LinearLayout(this);
txtResult = new TextView(this);
Это, конечно, вызовет NullpointerException
, потому что внутри login()
вы делаете:
txtResult.setText(HttpHelper.request(response));
В этом случае txtResult
не были инициализированы, поэтому оно равно null.
Sigh... do TextView txtResult = new TextView(this);
вне любого метода вызовет другой NullpointerException
. Это потому, что использование this
. Вы лучше прочитаете немного о том, что это значит, но позвольте мне дать вам простое объяснение: this
- это ключевое слово, используемое для ссылки на экземпляр объекта текущего объекта. Каждая инициализация, которую вы выполняете, которая не находится внутри метода, вызывается до того, как вызывается конструктор (который называется ленивой инициализацией), поэтому в этом случае объект не был создан и this
будет null.
Что вам нужно сделать, и я подумал, что вы поймете, что идея:
layout = new LinearLayout(this);
txtResult = new TextView(this);
login();