2014-09-22 4 views
-1

Это, по-видимому, вопрос, который задавался несколько раз. Но я не могу найти какое-либо решение нигде. Я создаю приложение под названием awesomequotes, и все это приложение содержит изображения, но всякий раз, когда я нажимаю на изображения для просмотра в полноэкранном режиме, он показывает ошибку «к сожалению, aweseomequotes остановился». я отслеживал ошибку LogCat он показывает ....java.lang.RuntimeException: Не удалось запустить Activity ComponentInfo {awesomequotes.FullScreenViewActivity}: java.lang.NullPointerException

09-21 15:45:45.950: E/AndroidRuntime(6967): FATAL EXCEPTION: main 

09-21 15:45:45.950: E/AndroidRuntime(6967): java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.example.awesomequotes/com.example.awesomequotes.FullScreenViewActivity}: java.lang.NullPointerException 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2355) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread.access$600(ActivityThread.java:151) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1335) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.os.Handler.dispatchMessage(Handler.java:99) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.os.Looper.loop(Looper.java:155) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread.main(ActivityThread.java:5520) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at java.lang.reflect.Method.invokeNative(Native Method) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at java.lang.reflect.Method.invoke(Method.java:511) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at dalvik.system.NativeStart.main(Native Method) 

09-21 15:45:45.950: E/AndroidRuntime(6967): Caused by: java.lang.NullPointerException 

09-21 15:45:45.950: E/AndroidRuntime(6967): at com.example.awesomequotes.FullScreenViewActivity.onCreate(FullScreenViewActivity.java:54) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.Activity.performCreate(Activity.java:5066) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101) 

09-21 15:45:45.950: E/AndroidRuntime(6967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) 

09-21 15:45:45.950: E/AndroidRuntime(6967): ... 11 more 

я имею различный РАЗРЯД, но здесь я только копируя код FullScreenActivity.java и файл макета для полной активности экрана.

FullScreenActivity.java

package com.example.awesomequotes; 
import app.AppController; 
import picasa.model.Wallpaper; 
import util.Utils; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.Point; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Display; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import com.android.volley.Request.Method; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.ImageLoader.ImageContainer; 
import com.android.volley.toolbox.ImageLoader.ImageListener; 
import com.android.volley.toolbox.JsonObjectRequest; 


public class FullScreenViewActivity extends Activity implements OnClickListener { 
    private static final String TAG = FullScreenViewActivity.class 
      .getSimpleName(); 
    public static final String TAG_SEL_IMAGE = "selectedImage"; 
    private Wallpaper selectedPhoto; 
    private ImageView fullImageView; 
    private LinearLayout llSetWallpaper, llDownloadWallpaper; 
    private Utils utils; 
    private ProgressBar pbLoader; 

    // Picasa JSON response node keys 
    private static final String TAG_ENTRY = "entry", 
      TAG_MEDIA_GROUP = "media$group", 
      TAG_MEDIA_CONTENT = "media$content", TAG_IMG_URL = "url", 
      TAG_IMG_WIDTH = "width", TAG_IMG_HEIGHT = "height"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     llSetWallpaper.setOnClickListener(this); 
     super.onCreate(savedInstanceState); 
     llDownloadWallpaper.setOnClickListener(this); 
     setContentView(R.layout.activity_fullscreen_image); 

     fullImageView = (ImageView) findViewById(R.id.imgFullscreen); 
     llSetWallpaper = (LinearLayout) findViewById(R.id.llSetWallpaper); 
     llDownloadWallpaper = (LinearLayout) findViewById(R.id.llDownloadWallpaper); 
     pbLoader = (ProgressBar) findViewById(R.id.pbLoader); 

     // hide the action bar in fullscreen mode 
     getActionBar().hide(); 

     utils = new Utils(getApplicationContext()); 

     // layout click listeners 
     llSetWallpaper.setOnClickListener(this); 
     llDownloadWallpaper.setOnClickListener(this); 

     // setting layout buttons alpha/opacity 
     llSetWallpaper.getBackground().setAlpha(70); 
     llDownloadWallpaper.getBackground().setAlpha(70); 

     Intent i = getIntent(); 
     selectedPhoto = (Wallpaper) i.getSerializableExtra(TAG_SEL_IMAGE); 

     // check for selected photo null 
     if (selectedPhoto != null) { 

      // fetch photo full resolution image by making another json request 
      fetchFullResolutionImage(); 

     } else { 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.msg_unknown_error), Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 

    /** 
    * Fetching image fullresolution json 
    * */ 
    private void fetchFullResolutionImage() { 
     String url = selectedPhoto.getPhotoJson(); 

     // show loader before making request 
     pbLoader.setVisibility(View.VISIBLE); 
     llSetWallpaper.setVisibility(View.GONE); 
     llDownloadWallpaper.setVisibility(View.GONE); 

     // volley's json obj request 
     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url, 
       null, new Response.Listener<JSONObject>() { 

        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, 
           "Image full resolution json: " 
             + response.toString()); 
         try { 
          // Parsing the json response 
          JSONObject entry = response 
            .getJSONObject(TAG_ENTRY); 

          JSONArray mediacontentArry = entry.getJSONObject(
            TAG_MEDIA_GROUP).getJSONArray(
            TAG_MEDIA_CONTENT); 

          JSONObject mediaObj = (JSONObject) mediacontentArry 
            .get(0); 

          String fullResolutionUrl = mediaObj 
            .getString(TAG_IMG_URL); 

          // image full resolution widht and height 
          final int width = mediaObj.getInt(TAG_IMG_WIDTH); 
          final int height = mediaObj.getInt(TAG_IMG_HEIGHT); 

          Log.d(TAG, "Full resolution image. url: " 
            + fullResolutionUrl + ", w: " + width 
            + ", h: " + height); 

          ImageLoader imageLoader = AppController 
            .getInstance().getImageLoader(); 

          // We download image into ImageView instead of 
          // NetworkImageView to have callback methods 
          // Currently NetworkImageView doesn't have callback 
          // methods 

          imageLoader.get(fullResolutionUrl, 
            new ImageListener() { 

             @Override 
             public void onErrorResponse(
               VolleyError arg0) { 
              Toast.makeText(
                getApplicationContext(), 
                getString(R.string.msg_wall_fetch_error), 
                Toast.LENGTH_LONG).show(); 
             } 

             @Override 
             public void onResponse(
               ImageContainer response, 
               boolean arg1) { 
              if (response.getBitmap() != null) { 
               // load bitmap into imageview 
               fullImageView 
                 .setImageBitmap(response 
                   .getBitmap()); 
               adjustImageAspect(width, height); 

               // hide loader and show set & 
               // download buttons 
               pbLoader.setVisibility(View.GONE); 
               llSetWallpaper 
                 .setVisibility(View.VISIBLE); 
               llDownloadWallpaper 
                 .setVisibility(View.VISIBLE); 
              } 
             } 
            }); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
          Toast.makeText(getApplicationContext(), 
            getString(R.string.msg_unknown_error), 
            Toast.LENGTH_LONG).show(); 
         } 

        } 
       }, new Response.ErrorListener() { 

        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.e(TAG, "Error: " + error.getMessage()); 
         // unable to fetch wallpapers 
         // either google username is wrong or 
         // devices doesn't have internet connection 
         Toast.makeText(getApplicationContext(), 
           getString(R.string.msg_wall_fetch_error), 
           Toast.LENGTH_LONG).show(); 

        } 
       }); 

     // Remove the url from cache 
     AppController.getInstance().getRequestQueue().getCache().remove(url); 

     // Disable the cache for this url, so that it always fetches updated 
     // json 
     jsonObjReq.setShouldCache(false); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(jsonObjReq); 
    } 

    /** 
    * Adjusting the image aspect ration to scroll horizontally, Image height 
    * will be screen height, width will be calculated respected to height 
    * */ 
    @SuppressWarnings("deprecation") 
    @SuppressLint("NewApi") 
    private void adjustImageAspect(int bWidth, int bHeight) { 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

     if (bWidth == 0 || bHeight == 0) 
      return; 

     int sHeight = 0; 

     if (android.os.Build.VERSION.SDK_INT >= 13) { 
      Display display = getWindowManager().getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      sHeight = size.y; 
     } else { 
      Display display = getWindowManager().getDefaultDisplay(); 
      sHeight = display.getHeight(); 
     } 

     int new_width = (int) Math.floor((double) bWidth * (double) sHeight 
       /(double) bHeight); 
     params.width = new_width; 
     params.height = sHeight; 

     Log.d(TAG, "Fullscreen image new dimensions: w = " + new_width 
       + ", h = " + sHeight); 

     fullImageView.setLayoutParams(params); 
    } 

    /** 
    * View click listener 
    * */ 
    @Override 
    public void onClick(View v) { 
     Bitmap bitmap = ((BitmapDrawable) fullImageView.getDrawable()) 
       .getBitmap(); 
     switch (v.getId()) { 
     // button Download Wallpaper tapped 
     case R.id.llDownloadWallpaper: 
      utils.saveImageToSDCard(bitmap); 
      break; 
     // button Set As Wallpaper tapped 
     case R.id.llSetWallpaper: 
      utils.setAsWallpaper(bitmap); 
      break; 
     default: 
      break; 
     } 

    } 
} 

это файл макета

activity_fullscreen_image.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/black" > 

    <ProgressBar 
     android:id="@+id/pbLoader" 
     style="?android:attr/progressBarStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" > 
    </ProgressBar> 

    <!-- Scroll view for fullscreen preview --> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="none" > 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" > 

      <ImageView 
       android:id="@+id/imgFullscreen" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:scaleType="fitXY" /> 
     </LinearLayout> 
    </HorizontalScrollView> 

    <!-- Set as wallpaper button --> 

    <LinearLayout 
     android:id="@+id/llSetWallpaper" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="10dp" 
     android:layout_marginLeft="10dp" 
     android:background="@drawable/btn_rounded_corner" 
     android:gravity="center_vertical" 
     android:orientation="horizontal" > 

     <ImageView 
      android:layout_width="25dp" 
      android:layout_height="25dp" 
      android:src="@drawable/ico_apply" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingRight="10dp" 
      android:paddingLeft="10dp" 
      android:text="@string/set_wallpaper" 
      android:textColor="@color/white" 
      android:textSize="18dp" /> 
    </LinearLayout> 

    <!-- Download wallpaper button --> 

    <LinearLayout 
     android:id="@+id/llDownloadWallpaper" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="10dp" 
     android:layout_marginRight="10dp" 
     android:background="@drawable/btn_rounded_corner" 
     android:gravity="center_vertical" 
     android:orientation="horizontal" > 

     <ImageView 
      android:layout_width="25dp" 
      android:layout_height="25dp" 
      android:src="@drawable/ico_download" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingRight="10dp" 
      android:paddingLeft="10dp" 
      android:text="@string/download_wallpaper" 
      android:textColor="@color/white" 
      android:textSize="18dp" /> 
    </LinearLayout> 

</RelativeLayout> 

это файл манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.awesomequotes" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.SET_WALLPAPER" /> 


    <application 
     android:name="app.AppController" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".SplashActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".FullScreenViewActivity" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name="info.androidhive.awesomewallpapers.SettingsActivity" 
      android:label="@string/action_settings" 
      android:screenOrientation="portrait" > 
     </activity> 







    </application> 

</manifest> 

Я очень благодарен за помощь. его прошло более двух дней с тех пор, как я застрял здесь.

спасибо

+0

То, что вы были в состоянии узнать, когда отладка/ручное выполнение этого кода? – admdrew

+1

at com.example.awesomequotes.FullScreenViewActivity.onCreate (FullScreenViewActivity.java:54) Эта строка кода вызывает исключение нулевого указателя – Nikhil

+0

Я дважды проверил код ... не смог найти ошибку? Я знаю, что это FullScreenViewActivity.onCreate (FullScreenViewActivity .java: 54 дает ошибку, но все кажется хорошо. –

ответ

0

В вашем OnCreate()

llSetWallpaper.setOnClickListener(this); 
super.onCreate(savedInstanceState); 
llDownloadWallpaper.setOnClickListener(this); 
setContentView(R.layout.activity_fullscreen_image); 

fullImageView = (ImageView) findViewById(R.id.imgFullscreen); 
llSetWallpaper = (LinearLayout) findViewById(R.id.llSetWallpaper); 
llDownloadWallpaper = (LinearLayout) findViewById(R.id.llDownloadWallpaper); 
pbLoader = (ProgressBar) findViewById(R.id.pbLoader); 

установить слушателя, прежде чем нашли точку зрения. Вы должны findViewById первую

0

Ваша проблема в вашем onCreate метода:

llSetWallpaper.setOnClickListener(this); 
    super.onCreate(savedInstanceState); 
    llDownloadWallpaper.setOnClickListener(this); 
    setContentView(R.layout.activity_fullscreen_image); 

    fullImageView = (ImageView) findViewById(R.id.imgFullscreen); 
    llSetWallpaper = (LinearLayout) findViewById(R.id.llSetWallpaper); 
    llDownloadWallpaper = (LinearLayout) findViewById(R.id.llDownloadWallpaper); 
    pbLoader = (ProgressBar) findViewById(R.id.pbLoader); 

Вы устанавливаете слушатель, прежде чем instatiating пунктов, это должно быть что-то вроде этого:

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_fullscreen_image); 

    //First you instantiate the items 

    fullImageView = (ImageView) findViewById(R.id.imgFullscreen); 
    llSetWallpaper = (LinearLayout) findViewById(R.id.llSetWallpaper); 
    llDownloadWallpaper = (LinearLayout) findViewById(R.id.llDownloadWallpaper); 
    pbLoader = (ProgressBar) findViewById(R.id.pbLoader); 

    //Then you set the listener 

    llDownloadWallpaper.setOnClickListener(this); 
+0

Thanx много @Fede Bucich .... его работающий сейчас :) –

+0

и еще одна вещь у вас умеет показывать изображения из моего приложения на экране разблокировки ..... было бы очень здорово, если это произойдет. –

+0

Привет @nishantjaisinghani, это очень сложный вопрос, чтобы ответить в комментариях. Я думаю, вы должны принять этот ответ и задать новый вопрос для этого –

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