Android Broadcast получает, намерение имеет дополнения - PullRequest
0 голосов
/ 20 января 2012

Я разрабатываю простое приложение для Android, чтобы загружать изображения из ficklr и загружать его в ImageView.Я использую asyncTask и широковещательный приемник, чтобы избежать проблем.Когда я пытаюсь выполнить его, я получаю ответ JSON без проблем в onReceive.Но если я пытаюсь выполнить в onReceive другой метод (searchPhoto), который загружает изображение flickr, я получаю эту ошибку:

01-19 22:24:25.914: E/AndroidRuntime(28284): FATAL EXCEPTION: main
01-19 22:24:25.914: E/AndroidRuntime(28284): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.jalbacar.restapi.SEARCH (has extras) } in com.jalbacar.restapi.SearchActivity$1@46e94708
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.os.Handler.handleCallback(Handler.java:587)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.os.Looper.loop(Looper.java:123)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.app.ActivityThread.main(ActivityThread.java:4668)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at java.lang.reflect.Method.invokeNative(Native Method)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at java.lang.reflect.Method.invoke(Method.java:521)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at dalvik.system.NativeStart.main(Native Method)
01-19 22:24:25.914: E/AndroidRuntime(28284): Caused by: java.lang.NullPointerException
01-19 22:24:25.914: E/AndroidRuntime(28284):    at    com.jalbacar.restapi.SearchActivity.searchPhoto(SearchActivity.java:89)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at com.jalbacar.restapi.SearchActivity$1.onReceive(SearchActivity.java:110)
01-19 22:24:25.914: E/AndroidRuntime(28284):    at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)

SearchActivity

package com.jalbacar.restapi;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.client.methods.HttpGet;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.jalbacar.restapi.RestTask;

public class SearchActivity extends Activity {

private static final String SEARCH_ACTION = "com.jalbacar.restapi.SEARCH";
private static final String SEARCH_URI = "http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=xxxxxxxxxxxxxxxxxx&photoset_id=72157624057488617&format=json&jsoncallback=?";

private TextView result;
private ProgressDialog progress;
private Bitmap bmFlickr;
private ImageView imageFlickrPhoto;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle("Activity");
    result = new TextView(this);
    setContentView(result);
    imageFlickrPhoto= (ImageView)findViewById(R.id.flickrPhoto);




  //Create the search request
    try{            

        HttpGet searchRequest = new HttpGet( new URI(SEARCH_URI));

        RestTask task = new RestTask(this,SEARCH_ACTION);
        task.execute(searchRequest);
        //Display progress to the user
        progress = ProgressDialog.show(this, "Searching", "Waiting For Results...", true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public void onResume() {
    super.onResume();
    registerReceiver(receiver, new IntentFilter(SEARCH_ACTION));
}

@Override
public void onPause() {
    super.onPause();
    unregisterReceiver(receiver);
}

public void searchPhoto(){
    URL FlickrPhotoUrl;
    try {
        FlickrPhotoUrl = new URL("http://farm5.staticflickr.com/4056/4659741303_4e994ba9aa_s.jpg");


        HttpURLConnection httpConnection = (HttpURLConnection) FlickrPhotoUrl.openConnection();
        httpConnection.setDoInput(true);

        httpConnection.connect();
        InputStream inputStream = httpConnection.getInputStream();
        bmFlickr = BitmapFactory.decodeStream(inputStream);
        if (bmFlickr != null){
               imageFlickrPhoto.setImageBitmap(bmFlickr);
        }
        if(progress != null) {
            progress.dismiss();
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

//bradcast receiver
private BroadcastReceiver  receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {

        //String response = intent.getStringExtra(RestTask.HTTP_RESPONSE);
        //result.setText(response);
        Toast.makeText(SearchActivity.this, "Galeria2", Toast.LENGTH_LONG).show();
        searchPhoto();
    }
};

Наиболее вероятная проблема - это простая проблемаочень очевидно, но я младший разработчик Android.Так что, пожалуйста, ребята, наберитесь терпения.Заранее спасибо

1 Ответ

0 голосов
/ 20 января 2012

У вас есть NPE в строке 89. Так что я думаю, что проблема в макете.Посмотрите на onCreate ():

result = new TextView(this);
setContentView(result);
imageFlickrPhoto= (ImageView)findViewById(R.id.flickrPhoto);

Вы устанавливаете TextView как контент, но пытаетесь найти ImageView.Итак, вам просто нужно установить макет из Xml или сделать что-то вроде этого

LinearLayout conatiner = new LinearLayout(this);
container.setOrientation(LinearLayout.VERTICAL);
container.addView(result = new TextView(this));
container.addView(result = new ImageView(this));
setContentView(container);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...