2015-04-27 4 views
-1

Я новичок в программировании для Android и могу просто пропустить очевидную ошибку, но я не вижу ее прямо сейчас.Ошибка HttpPost Android с HttpGet

Пункт на самом деле довольно простой. У меня есть рабочий метод HttpGet и только для того, чтобы попытаться изменить его на метод HttpPost. Но это не сработало.

Интересная часть - метод «lastTweet». Я просто прокомментировал Post-Request, но, как я уже сказал, если я перейду с адресата к сообщению, приложение выйдет из строя.

Так что я был бы очень благодарен, если бы кто-нибудь мог объяснить мне, что я сделал не так. Спасибо.

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.apache.http.HttpEntity; 
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.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HTTP; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

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

public class MainActivity extends Activity { 

TextView Text; 
HttpClient client; 
JSONObject json; 

final static String URL = "http://www.openligadb.de/api/getmatchdata/bl1/2014/15"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Text = (TextView)findViewById(R.id.myTextView); 
    client = new DefaultHttpClient(); 
    new Read().execute("MatchID"); 
} 

public JSONObject lastTweet(String username) throws ClientProtocolException, IOException, JSONException { 
    HttpGet get = new HttpGet(URL); 
    //HttpPost post = new HttpPost(URL); 

    /* 
    List<NameValuePair> pairs = new ArrayList<NameValuePair>(); 
    pairs.add(new BasicNameValuePair("key1", "value1")); 
    pairs.add(new BasicNameValuePair("key2", "value2")); 
    post.setEntity(new UrlEncodedFormEntity(pairs)); 
    */ 

    HttpResponse r = client.execute(get); 
    //HttpResponse r = client.execute(post); 
    int status = r.getStatusLine().getStatusCode(); 

    if (status == 200) { 
     HttpEntity e = r.getEntity(); 
     String data = EntityUtils.toString(e); 
     JSONArray timeline = new JSONArray(data); 
     JSONObject last = timeline.getJSONObject(0); 
     return last; 
    } 
    else { 
     Toast.makeText(MainActivity.this, "error", Toast.LENGTH_LONG).show(); 
     return null; 
    } 
} 

public class Read extends AsyncTask<String, Integer, String>{ 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      json = lastTweet("wurst"); 
      return json.getString(params[0]); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     Text.setText(s); 
    } 
} 

}

Спасибо за быстрый ответ. Как просил у greenapps в LogCat:

Local Branch: 
    Remote Branch: 
    Local Patches: 
    Reconstruct Branch: 
04-29 16:55:02.764 2642-2642/com.example.itsme.jsonnb2 D/OpenGLRenderer﹕ Enabling debug mode 0 
04-29 16:55:04.116 2642-2855/com.example.itsme.jsonnb2 W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x418a1da0) 
04-29 16:55:04.146 2642-2855/com.example.itsme.jsonnb2 E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 
    Process: com.example.itsme.jsonnb2, PID: 2642 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
      at android.os.AsyncTask$3.done(AsyncTask.java:300) 
      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
      at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
      at android.os.Handler.<init>(Handler.java:200) 
      at android.os.Handler.<init>(Handler.java:114) 
      at android.widget.Toast$TN.<init>(Toast.java:384) 
      at android.widget.Toast.<init>(Toast.java:113) 
      at android.widget.Toast.makeText(Toast.java:272) 
      at com.example.itsme.jsonnb2.MainActivity.lastTweet(MainActivity.java:68) 
      at com.example.itsme.jsonnb2.MainActivity$Read.doInBackground(MainActivity.java:78) 
      at com.example.itsme.jsonnb2.MainActivity$Read.doInBackground(MainActivity.java:73) 
      at android.os.AsyncTask$2.call(AsyncTask.java:288) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
            at java.lang.Thread.run(Thread.java:841) 
+0

Если приложение выйдет из строя, вы найдете причину в логарифме. Отправьте его здесь, пожалуйста. – greenapps

+0

Просто добавил логарифм. thx для ur help – terryer

ответ

0

В doInBackGround вы не можете использовать Тост(). Вы используете Toast() в lastTweet() и, следовательно, в doInBackGround. Замените Toast bij на Log.d(). Вы также можете оставить сообщение в частной строке AsyncTask и отобразить эту строку в onPostExecute в ... Toast(). Изучите логарифм, и вы увидите.

 json = lastTweet("wurst"); 
     return json.getString(params[0]); 

Как lastTweet() может возвращать нуль и, следовательно, JSon == NULL следующее заявление json.getString (PARAMS [0]); приведет к исключению NullPointerException. Поэтому не выполняйте этот оператор, когда json == null.

Изменения в

 json = lastTweet("wurst"); 
     if (json == null) 
     return null; 
     return json.getString(params[0]); 

В onPostExcute параметр s может быть пустым. Поэтому проверьте этот параметр на значение null и покажите тост, говорящий об этом, когда null.

Смежные вопросы