首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓[ java.lang.NoClassDefFoundError: android.widget.Toolbar ]

安卓[ java.lang.NoClassDefFoundError: android.widget.Toolbar ]
EN

Stack Overflow用户
提问于 2015-07-23 15:14:29
回答 5查看 3.5K关注 0票数 1

我在我的列表视图活动中创建了一个工具栏。为此,我使用了以下代码:

代码语言:javascript
复制
public class Home extends ListActivity {

    private ProgressDialog pDialog;

    // URL to get contacts JSON
    private static String url = "http://api-11hr.anovatesoft.com/v1/list";

    // JSON Node names
    private static final String TAG_CONTACTS = "contacts";
    private static final String TAG_USERNAME = "username";
    private static final String TAG_NAME = "name";
    private static final String TAG_EMAIL = "email";
    private static final String TAG_ADDRESS = "address";
    private static final String TAG_CONTACT_NUMBER = "contactnumber";
    private static final String TAG_POSTAL_CODE = "postalcode";
    private static final String TAG_IMAGE = "image";
    SessionManager session;
    private double latitude;
    private double longitude;
    private String apikey;
    private String status;
    GPSTracker gps;

    private Toolbar toolbar;                              // Declaring the Toolbar Object

    // contacts JSONArray
    JSONArray contacts = null;

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> contactList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object
        setActionBar(toolbar);                   // Setting toolbar as the ActionBar with setSupportActionBar() call

        // get action bar
      /*  ActionBar actionBar = getActionBar();
        getActionBar().setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);*/



        AlertDialog.Builder alertDialog2 = new AlertDialog.Builder(
                Home.this);

// Setting Dialog Title
        alertDialog2.setTitle("Too quiet?");

// Setting Dialog Message
        alertDialog2.setMessage("Follow your favourite merchants and see what deals they're launching at the 11th Hour!");



// Setting Positive "Yes" Btn
        alertDialog2.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to execute after dialog

                        dialog.cancel();

                    }
                });

        alertDialog2.show();


        Gps_func();


        // Session class instance
        session = new SessionManager(getApplicationContext());

        // get user data from session
        HashMap<String, String> user = session.getUserDetails();


        // apikey
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();

        //Set name and email in global/application context
        apikey = globalVariable.getApikey();


        latitude = globalVariable.getLatitude();
        longitude = globalVariable.getLongitude();
        status = globalVariable.getStatus();



        contactList = new ArrayList<HashMap<String, String>>();

        ListView lv = getListView();

        // Listview on item click listener
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // getting values from selected ListItem

                String cost = ((TextView) view.findViewById(R.id.email))
                        .getText().toString();


                // Starting single contact activity
                Intent in = new Intent(getApplicationContext(),
                        Adds.class);

                in.putExtra(TAG_EMAIL, cost);

                startActivity(in);

            }
        });

        // Calling async task to get json
        new GetContacts().execute();
    }

    private void Gps_func() {

        gps = new GPSTracker(Home.this);

        // check if GPS enabled
        if (gps.canGetLocation()) {

            double latitude = gps.getLatitude();
            double longitude = gps.getLongitude();

            // \n is for new line
            //  Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
            Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude);

        } else {
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            gps.showSettingsAlert();

            if (gps.canGetLocation()) {
                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();

                // \n is for new line
                // Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
                Log.d("tag", "Longitude:\n" + longitude + "\n Latitude: \n" + latitude);

            }
        }

    }


    @Override
    protected void onRestart() {
        super.onRestart();
        Gps_func();
    }



    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(Home.this);
            pDialog.setMessage("Please wait....");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler1 sh = new ServiceHandler1(apikey, latitude, longitude);


            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url, ServiceHandler1.POST);

            Log.d("Response: ", "> " + jsonStr);


            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    contacts = jsonObj.getJSONArray(TAG_CONTACTS);

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String username = c.getString(TAG_USERNAME);
                        String name = c.getString(TAG_NAME);
                        String email = c.getString(TAG_EMAIL);
                        String address = c.getString(TAG_ADDRESS);
                        String gender = c.getString(TAG_CONTACT_NUMBER);
                        String postalcode = c.getString(TAG_POSTAL_CODE);


                        // tmp hashmap for single contact
                        HashMap<String, String> contact = new HashMap<String, String>();

                        // adding each child node to HashMap key => value

                        contact.put(TAG_EMAIL, email);


                        // adding contact to contact list
                        contactList.add(contact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }


        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    Home.this, contactList,
                    R.layout.list_item1, new String[]{TAG_EMAIL,
            }, new int[]{
                    R.id.email,});

            setListAdapter(adapter);
        }

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

但当我运行应用程序时,它给出了一个错误:

java.lang.NoClassDefFoundError: android.widget.Toolbar

请帮我弄个工具栏

代码语言:javascript
复制
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"



    defaultConfig {
        applicationId "com.example.kmi_dev.fbloginsample"
        minSdkVersion 11
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.facebook.android:facebook-android-sdk:4.1.0'
}

tool_bar.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/ColorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:elevation="4dp"

    >

</android.support.v7.widget.Toolbar>

包含tool_bar.xml的列表布局

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <!-- Main ListView
         Always give id value as list(@android:id/list)


    -->
    <include
        android:id="@+id/tool_bar"
        layout="@layout/tool_bar"
        ></include>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>


</LinearLayout>
EN

回答 5

Stack Overflow用户

发布于 2015-07-23 17:54:12

这个错误意味着你想转换R.id.tool_barToolbar。在您的布局中,Toolbarandroid.support.v7.widget.Toolbar,但是在您的Home中,您希望将其转换为android.widget.Toolbar。所以,检查你的导入,确保你导入的Toolbarandroid.support.v7.widget.Toolbar

附言:如果它不起作用,清理或重建你的项目。

票数 5
EN

Stack Overflow用户

发布于 2015-07-23 16:05:32

工具栏包含在支持库中。直到我的知识工具栏应该从导入

代码语言:javascript
复制
android.support.v7.widget.Toolbar

不是这个

代码语言:javascript
复制
 android.widget.Toolbar

因此,我想请求您像在build.gradle中那样从V7支持库中添加工具栏:

代码语言:javascript
复制
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // Android Support Libraries
    compile 'com.android.support:appcompat-v7:22.2.0'

    }
票数 1
EN

Stack Overflow用户

发布于 2018-06-24 23:28:28

首先,采用任何布局,将此工具栏放入其中。

使用27SDK,不要使用版本28.0.0的Alphas版本,它有一个我曾面对过的bug。如果你想使用最新的SDK,请使用alphas之后的版本,就像测试版一样。使用,在它的稳定版本之后,将会到来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31580550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档