Próbuję zmusić moją aplikację androidową aby pobierała dane przez HTTP i parsowała je Gsonem. Wiem, że kod działa bo mam inny projekt, który przy drobnych (na moje oko nieistotnych zmianach) działa dobrze. W mojej aplikacji teraz problem leży w HttpResponse getResponse = client.execute(getRequest);
, który coś ode mnie chce.
I tu jest problem, nie wiem co.
Próbuję wrzucać przeróżne rzeczy w catch, ale z uporem maniaka Logcat czy konsola milczą. A nawet i bez tego milczą gdy aplikacja zalicza zgon. Moje pytanie brzmi... co robię źle? Jak mam zrobić aby coś mi się wyświetlało w konsoli gdy aplikacja mi się posypie?
Dla porządku wrzucę też właściwy kod, może przy okazji rzuci wam się w oczy mój błąd.
Uruchamiam kod tak:
package com.example.userlogin;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new RetrieveHTTP(this, URL).execute();
testLaunch();
}
}
package com.example.userlogin;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.google.gson.Gson;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
public class RetrieveHTTP extends AsyncTask<String, Void, InputStream> {
String url = "link do jsona";
Context c;
public RetrieveHTTP(Context c, String url) {
this.c = c;
//this.url = url;
}
protected InputStream doInBackground(String... urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url);
try {
HttpResponse getResponse = client.execute(getRequest); //TO SPRAWIA PROBLEMY
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
return getResponseEntity.getContent();
} catch (ClientProtocolException e) {
Log.e("Error: ",Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("Error: ",Log.getStackTraceString(e));
} catch (IllegalStateException e) {
Log.e("Error: ",Log.getStackTraceString(e));
}
return null;
}
private void feedGsonWithHTTP(InputStream source) {
try {
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
// SearchResponse response = gson.fromJson(reader,
// SearchResponse.class);
// List<Result> results = response.objects;
// Result r = results.get(0);
// String s = r.firstName;
} catch (Exception e) {
Log.e("Error: ", Log.getStackTraceString(e));
}
Toast.makeText(c, "yay", Toast.LENGTH_LONG).show();
}
protected void onPostExecute(InputStream result){
feedGsonWithHTTP(result);
}
w feedGsonWithHTTP połowa jest wykomentowana bowiem już Reader się wysypuje. Ergo - source jest złe. Ergo - poprzednia metoda coś miesza.
Aha, z góry odpowiadając - mianfest mam.