从Android中的fliker导入图像

从Android中的fliker导入图像,android,nullpointerexception,Android,Nullpointerexception,我正在尝试从Android应用程序中的fliker导入图像 我的代码如下: public class MainActivity extends Activity { ProgressDialog progressDialog; BackgroundThread backgroundThread; public class FlickrImage { String Id; String Owner; String Secret; String Server;

我正在尝试从Android应用程序中的fliker导入图像

我的代码如下:

public class MainActivity extends Activity {

ProgressDialog progressDialog;
BackgroundThread backgroundThread;

public class FlickrImage {
    String Id;
    String Owner;
    String Secret;
    String Server;
    String Farm;
    String Title;

    Bitmap FlickrBitmap;

    FlickrImage(String _Id, String _Owner, String _Secret,
                String _Server, String _Farm, String _Title){
        Id = _Id;
        Owner = _Owner;
        Secret = _Secret;
        Server = _Server;
        Farm = _Farm;
        Title = _Title;

        FlickrBitmap = preloadBitmap();
    }

    private Bitmap preloadBitmap(){
        Bitmap bm= null;

        String FlickrPhotoPath =
                "http://farm" + Farm + ".static.flickr.com/"
                        + Server + "/" + Id + "_" + Secret + "_m.jpg";

        URL FlickrPhotoUrl = null;

        try {
            FlickrPhotoUrl = new URL(FlickrPhotoPath);

            HttpURLConnection httpConnection
                    = (HttpURLConnection) FlickrPhotoUrl.openConnection();
            httpConnection.setDoInput(true);
            httpConnection.connect();
            InputStream inputStream = httpConnection.getInputStream();
            bm = BitmapFactory.decodeStream(inputStream);

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return bm;
    }

    public Bitmap getBitmap(){
        return FlickrBitmap;
    }

}
class FlickrAdapter extends BaseAdapter{
    private Context context;
    private FlickrImage[] FlickrAdapterImage;;

    FlickrAdapter(Context c, FlickrImage[] fImage){
        context = c;
        FlickrAdapterImage = fImage;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return FlickrAdapterImage.length;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return FlickrAdapterImage[position];
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView image;
        if (convertView == null) {
            image = new ImageView(context);
            image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            image.setScaleType(ImageView.ScaleType.CENTER_CROP);
            image.setPadding(8, 8, 8, 8);
        } else {
            image = (ImageView) convertView;
        }

        image.setImageBitmap(FlickrAdapterImage[position].getBitmap());

        return image;
    }

}
FlickrImage[] myFlickrImage;
String FlickrQuery_url = "http://api.flickr.com/services/rest/?method=flickr.photos.search";
String FlickrQuery_per_page = "&per_page=10";
String FlickrQuery_nojsoncallback = "&nojsoncallback=1";
String FlickrQuery_format = "&format=json";
String FlickrQuery_tag = "&tags=";
String FlickrQuery_key = "&api_key=";
String FlickrApiKey = "123456789012345678901234567890123";
//final String DEFAULT_SEARCH = "Bill_Gate";
final String DEFAULT_SEARCH = "new_york";
EditText searchText;
Button searchButton;
Gallery photoBar;
Bitmap bmFlickr;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    searchText = (EditText)findViewById(R.id.searchtext);
    searchText.setText(DEFAULT_SEARCH);
    searchButton = (Button)findViewById(R.id.searchbutton);
    photoBar = (Gallery)findViewById(R.id.photobar);
    searchButton.setOnClickListener(searchButtonOnClickListener);
}
private Button.OnClickListener searchButtonOnClickListener
        = new Button.OnClickListener(){
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        progressDialog = ProgressDialog.show(MainActivity.this,
                "ProgressDialog", "Wait!");

        backgroundThread = new BackgroundThread();
        backgroundThread.setRunning(true);
        backgroundThread.start();
    }};
private String QueryFlickr(String q){
    String qResult = null;
    String qString =
            FlickrQuery_url
                    + FlickrQuery_per_page
                    + FlickrQuery_nojsoncallback
                    + FlickrQuery_format
                    + FlickrQuery_tag + q
                    + FlickrQuery_key + FlickrApiKey;
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(qString);
    try {
        HttpEntity httpEntity = httpClient.execute(httpGet).getEntity();

        if (httpEntity != null){
            InputStream inputStream = httpEntity.getContent();
            Reader in = new InputStreamReader(inputStream);
            BufferedReader bufferedreader = new BufferedReader(in);
            StringBuilder stringBuilder = new StringBuilder();

            String stringReadLine = null;

            while ((stringReadLine = bufferedreader.readLine()) != null) {
                stringBuilder.append(stringReadLine + "\n");
            }

            qResult = stringBuilder.toString();
            inputStream.close();
        }

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return qResult;
}
private FlickrImage[] ParseJSON(String json){
    FlickrImage[] flickrImage = null;
    bmFlickr = null;
    String flickrId;
    String flickrOwner;
    String flickrSecret;
    String flickrServer;
    String flickrFarm;
    String flickrTitle;
    try {
        JSONObject JsonObject = new JSONObject(json);
        JSONObject Json_photos = JsonObject.getJSONObject("photos");
        JSONArray JsonArray_photo = Json_photos.getJSONArray("photo");

        flickrImage = new FlickrImage[JsonArray_photo.length()];
        for (int i = 0; i < JsonArray_photo.length(); i++){
            JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(i);
            flickrId = FlickrPhoto.getString("id");
            flickrOwner = FlickrPhoto.getString("owner");
            flickrSecret = FlickrPhoto.getString("secret");
            flickrServer = FlickrPhoto.getString("server");
            flickrFarm = FlickrPhoto.getString("farm");
            flickrTitle = FlickrPhoto.getString("title");
            flickrImage[i] = new FlickrImage(flickrId, flickrOwner, flickrSecret,
                    flickrServer, flickrFarm, flickrTitle);
        }

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return flickrImage;
}

public class BackgroundThread extends Thread{
    volatile boolean running = false;
    int cnt;

    void setRunning(boolean b){
        running = b;
        cnt = 10;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        String searchQ = searchText.getText().toString();
        String searchResult = QueryFlickr(searchQ);
        Log.d(">>>>>searchResult", searchResult);
        myFlickrImage = ParseJSON(searchResult);
        handler.sendMessage(handler.obtainMessage());
    }
}

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        progressDialog.dismiss();
        photoBar.setAdapter(new FlickrAdapter(MainActivity.this, myFlickrImage));
        Toast.makeText(MainActivity.this,
                "Flickr images loaded", Toast.LENGTH_LONG).show();
    }

};

有解决办法吗

您将得到一个名为“photos”的json对象,它在解析json数据时没有任何值。检查您的json数据。我在演示中发现了该url,但我对该url感到困惑,我必须使用该url?您应该调试并检查这行JSONObject JSONObject=new JSONObject(json)中获得的数据;然后解析所需的json。//>>搜索结果:{“stat”:“fail”,“code”:95,“message”:“SSL是必需的”}不包括“照片”,您可以尝试使用以下url=“KEY&per_page=50&user_id=&format=json&nojsoncallback=1”;
11-03 12:06:11.536 1935-1935/com.zaptech.flikerimageimport W/EGL_genymotion: eglSurfaceAttrib not implemented
11-03 12:06:11.888 1935-2256/com.zaptech.flikerimageimport D/>>>>>searchResult: {"stat":"fail","code":95,"message":"SSL is required"}
11-03 12:06:11.888 1935-2256/com.zaptech.flikerimageimport W/System.err: org.json.JSONException: No value for photos
11-03 12:06:11.892 1935-2256/com.zaptech.flikerimageimport W/System.err:     at org.json.JSONObject.get(JSONObject.java:354)
11-03 12:06:11.892 1935-2256/com.zaptech.flikerimageimport W/System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:569)
11-03 12:06:11.892 1935-2256/com.zaptech.flikerimageimport W/System.err:     at com.zaptech.flikerimageimport.MainActivity.ParseJSON(MainActivity.java:270)
11-03 12:06:11.892 1935-2256/com.zaptech.flikerimageimport W/System.err:     at com.zaptech.flikerimageimport.MainActivity.access$100(MainActivity.java:40)
11-03 12:06:11.892 1935-2256/com.zaptech.flikerimageimport W/System.err:     at com.zaptech.flikerimageimport.MainActivity$BackgroundThread.run(MainActivity.java:309)
11-03 12:06:11.908 1935-1935/com.zaptech.flikerimageimport D/AndroidRuntime: Shutting down VM
11-03 12:06:11.908 1935-1935/com.zaptech.flikerimageimport W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa61f5908)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime: FATAL EXCEPTION: main
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime: java.lang.NullPointerException
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at com.zaptech.flikerimageimport.MainActivity$FlickrAdapter.getCount(MainActivity.java:114)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:114)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at com.zaptech.flikerimageimport.MainActivity$2.handleMessage(MainActivity.java:323)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5041)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-03 12:06:11.936 1935-1935/com.zaptech.flikerimageimport E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)