2016-09-06 10 views
0

AndroidビルドバージョンLollipop搭載のデバイスでうまくいきますが、アンドロイドビルドを搭載したデバイスで実行しようとすると例外が発生しますバージョンKitkat。これは私のプロジェクトのbuild.gradleファイルです:AndroidスタジオプロジェクトはLollipopで動作しますが、Kitkatでは動作しません

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.example.avi.phoenixinfotech" 
     minSdkVersion 15 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:recyclerview-v7:+' 
    compile 'com.mcxiaoke.volley:library-aar:1.0.0' 
    compile 'com.android.support:multidex:1.0.0' 
} 

、ここでは、私はキットカットのデバイス上でアプリケーションを実行すると、私は取得していますエラーのログです:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.avi.phoenixinfotech/com.example.avi.phoenixinfotech.MainActivity}: 
    java.lang.ClassNotFoundException: Didn't find class "com.example.avi.phoenixinfotech.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.avi.phoenixinfotech-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.avi.phoenixinfotech-1, /system/lib]] 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: 
    Didn't find class "com.example.avi.phoenixinfotech.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.avi.phoenixinfotech-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.avi.phoenixinfotech-1, /system/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)  
    at android.app.ActivityThread.access$600(ActivityThread.java:141)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)  
    at android.os.Handler.dispatchMessage(Handler.java:99)  
    at android.os.Looper.loop(Looper.java:137)  
    at android.app.ActivityThread.main(ActivityThread.java:5103)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:525)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
    at dalvik.system.NativeStart.main(Native Method)  

、ここでは、レイアウトファイルです。ここで

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.example.avi.phoenixinfotech.MainActivity"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" /> 

    <ProgressBar 
     android:id="@+id/progressBar1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 
</RelativeLayout> 

は、その拡張AppCompactActivity

package com.example.avi.phoenixinfotech; 

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.app.Application; 
import android.content.Context; 
import android.os.Build; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.view.View.OnScrollChangeListener; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.android.volley.toolbox.Volley; 

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

import java.util.ArrayList; 
import java.util.List; 


@TargetApi(Build.VERSION_CODES.M) 
public class MainActivity extends AppCompatActivity implements OnScrollChangeListener{ 

    //Creating a List of superheroes 
    private List<NewsFeed> listSuperHeroes; 

    //Creating Views 
    private RecyclerView recyclerView; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 

    //Volley Request Queue 
    private RequestQueue requestQueue; 

    //The request counter to send ?page=1, ?page=2 requests 
    private int requestCount = 1; 

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

     //Initializing Views 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 


     //Initializing our superheroes list 
     listSuperHeroes = new ArrayList<>(); 

     requestQueue = Volley.newRequestQueue(this); 

     //Calling method to get data to fetch data 
     getData(); 

     //Adding an scroll change listener to recyclerview 
     recyclerView.setOnScrollChangeListener(this); 

     //initializing our adapter 
     adapter = new CardAdapter(listSuperHeroes, this); 

     //Adding adapter to recyclerview 
     recyclerView.setAdapter(adapter); 
    } 

    //Request to get json from server we are passing an integer here 
    //This integer will used to specify the page number for the request ?page = requestcount 
    //This method would return a JsonArrayRequest that will be added to the request queue 
    private JsonArrayRequest getDataFromServer(int requestCount) { 
     //Initializing ProgressBar 
     final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1); 

     //Displaying Progressbar 
     progressBar.setVisibility(View.VISIBLE); 
     setProgressBarIndeterminateVisibility(true); 

     //JsonArrayRequest of volley 
     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL + String.valueOf(requestCount), 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         //Calling method parseData to parse the json response 
         parseData(response); 
         //Hiding the progressbar 
         progressBar.setVisibility(View.GONE); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         progressBar.setVisibility(View.GONE); 
         //If an error occurs that means end of the list has reached 
         Toast.makeText(MainActivity.this, "No More Items Available", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

     //Returning the request 
     return jsonArrayRequest; 
    } 

    //This method will get data from the web api 
    private void getData() { 
     //Adding the method to the queue by calling the method getDataFromServer 
     requestQueue.add(getDataFromServer(requestCount)); 
     //Incrementing the request counter 
     requestCount++; 
    } 

    //This method will parse json data 
    private void parseData(JSONArray array) { 
     for (int i = 0; i < array.length(); i++) { 
      //Creating the superhero object 
      NewsFeed superHero = new NewsFeed(); 
      JSONObject json = null; 
      try { 
       //Getting json 
       json = array.getJSONObject(i); 

       //Adding data to the superhero object 
       superHero.setImageUrl(json.getString(Config.TAG_IMAGE_URL)); 
       superHero.setName(json.getString(Config.TAG_NAME)); 
       superHero.setPublisher(json.getString(Config.TAG_PUBLISHER)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      //Adding the superhero object to the list 
      listSuperHeroes.add(superHero); 
     } 

     //Notifying the adapter that data has been added or changed 
     adapter.notifyDataSetChanged(); 
    } 

    //This method would check that the recyclerview scroll has reached the bottom or not 
    private boolean isLastItemDisplaying(RecyclerView recyclerView) { 
     if (recyclerView.getAdapter().getItemCount() != 0) { 
      int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); 
      if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1) 
       return true; 
     } 
     return false; 
    } 

    //Overriden method to detect scrolling 
    @Override 
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
     //Ifscrolled at last then 
     if (isLastItemDisplaying(recyclerView)) { 
      //Calling the method getdata again 
      getData(); 
     } 
    } 

} 
+1

MainActivityの基本クラスは何ですか? – FriendlyMikhail

+0

** AppCompactActivity ** –

答えて

0

が、それは はあなたのシングルインスタンスはLibのクラスをボレー開き、MultiDexApplication

public class AppController extends MultiDexApplication { 
 

 
    public static final String TAG = AppController.class 
 
      .getSimpleName(); 
 

 
    private RequestQueue mRequestQueue; 
 
    private ImageLoader mImageLoader; 
 

 
    private static AppController mInstance; 
 

 
    @Override 
 
    public void onCreate() { 
 
     super.onCreate(); 
 
     mInstance = this; 
 
    } 
 
}

を拡張動作する可能性があり、これを試してみてくださいMainActivityです
関連する問題