2016-09-29 5 views
0

Ich bin neu Android Entwickler und ich habe keine Erfahrung in Code Ich möchte Spinner erstellen und Daten von URL analysieren und injizieren es in meinem Spinner, für Info: Ich habe Menü in allen Aktivitäten und Tabs in nach Hause Aktivität, so dass ich erstelle Basisklasse Aktivität für gemeinsames Menü Bitte Wenn Sie Erweiterung meines Code haben, bitte informieren Sie mir Haupt-Problem: Spinner Nicht meine Daten zeigen, und geben Sie mir Ausnahmefehler mit Set AdapterAndroid Spinner Adapter Jetzt funktioniert

Hier Basis Aktivität:

import android.os.Bundle; 
import android.support.annotation.LayoutRes; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.widget.LinearLayoutCompat; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 

public class BaseActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    protected LinearLayout fulllayout; 
    protected FrameLayout actContent; 

    @Override 
    public void setContentView(@LayoutRes int layoutResID) { 
     //For make Menu RTL 
     getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 

     fulllayout = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_base, null);  
     actContent = (FrameLayout) fulllayout.findViewById(R.id.act_content);  
     getLayoutInflater().inflate(layoutResID, actContent, true); 

     super.setContentView(fulllayout); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.END)) { 
      drawer.closeDrawer(GravityCompat.END); 
     } else { 
      super.onBackPressed(); 
     } 
    }  

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.END); 
     return true; 
    } 
} 

Hier Home Aktivität:

package com.arabnewtech.a22.zoodrealstate; 

import android.app.ProgressDialog; 
import android.net.Uri; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.view.PagerAdapter; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.arabnewtech.a22.zoodrealstate.Adapters.CityAdapter; 
import com.arabnewtech.a22.zoodrealstate.Beans.CityBeans; 
import com.arabnewtech.a22.zoodrealstate.customviews.WrapContentViewPager; 
import com.google.android.gms.appindexing.Action; 
import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.loopj.android.http.AsyncHttpClient; 
import com.loopj.android.http.RequestParams; 
import com.loopj.android.http.TextHttpResponseHandler; 

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

import java.util.ArrayList;  
import cz.msebera.android.httpclient.Header; 

public class Home extends BaseActivity { 

    /** 
    * The {@link PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link FragmentPagerAdapter} derivative, which will keep every 
    * loaded fragment in memory. If this becomes too memory intensive, it 
    * may be best to switch to a 
    * {@link FragmentStatePagerAdapter}. 
    */  

    private ProgressDialog dialog; 
    private SectionsPagerAdapter mSectionsPagerAdapter; 
    private TextView tap1, tap2; 
    private String cityUrl = "http://arabnewtech.org/zoodre/public/api/locations/city/3"; 
    private Spinner citySpinner; 
    public ArrayList<CityBeans> cityBeansList = new ArrayList<CityBeans>(); 
    TextView output = null; 
    CityAdapter adapter; 
    Home activity = null; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    private WrapContentViewPager mViewPager; 
    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    private GoogleApiClient client2; 

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

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (WrapContentViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // Create Tabs Handelation 
     tabsHandel(); 

     // Initialize Views 
     initViews(); 

     // City Spinner 
     setListData();  

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client2 = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 

    public void initViews() { 
     activity = this; 
     citySpinner = (Spinner) findViewById(R.id.cityID); 
     output = (TextView) findViewById(R.id.output); 
    } 
    public void setListData() { 

    // Now i have taken static values by loop. 
    // For further inhancement we can take data by webservice/json/xml; 

    for (int i = 0; i < 11; i++) { 

     final CityBeans sched = new CityBeans(); 

     /******* Firstly take data in model object ******/ 
     sched.setId("id " + i); 
     sched.setName("Name" + i); 

     /******** Take Model Object in ArrayList **********/ 
     cityBeansList.add(sched); 
    } 

      /******** Take Model Object in ArrayList **********/ 
     adapter = new CityAdapter(activity, R.layout.spinner_rows, cityBeansList); 
     // Set adapter to spinner 
     citySpinner.setAdapter(adapter); 
     // Listener called when spinner item selected 
     citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) { 
       // Get selected row data to show on screen 
       String Company = ((TextView) v.findViewById(R.id.company)).getText().toString(); 
       String CompanyUrl = ((TextView) v.findViewById(R.id.sub)).getText().toString(); 

       String OutputMsg = "Selected Company : \n\n" + Company + "\n" + CompanyUrl; 
       output.setText(OutputMsg); 

       Toast.makeText(
         getApplicationContext(), OutputMsg, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parentView) { 
       // your code here 
      } 

     }); 

} 


    public void tabsHandel() { 
     tap1 = (TextView) findViewById(R.id.tap1); 
     tap2 = (TextView) findViewById(R.id.tap2); 

     tap1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mViewPager.setCurrentItem(0); 
      } 
     }); 

     tap2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mViewPager.setCurrentItem(1); 
      } 
     }); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client2.connect(); 
     Action viewAction = Action.newAction(
       Action.TYPE_VIEW, // TODO: choose an action type. 
       "Home Page", // TODO: Define a title for the content shown. 
       // TODO: If you have web page content that matches this app activity's content, 
       // make sure this auto-generated web page URL is correct. 
       // Otherwise, set the URL to null. 
       Uri.parse("http://host/path"), 
       // TODO: Make sure this auto-generated app URL is correct. 
       Uri.parse("android-app://com.arabnewtech.a22.zoodrealstate/http/host/path") 
     ); 
     AppIndex.AppIndexApi.start(client2, viewAction); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     Action viewAction = Action.newAction(
       Action.TYPE_VIEW, // TODO: choose an action type. 
       "Home Page", // TODO: Define a title for the content shown. 
       // TODO: If you have web page content that matches this app activity's content, 
       // make sure this auto-generated web page URL is correct. 
       // Otherwise, set the URL to null. 
       Uri.parse("http://host/path"), 
       // TODO: Make sure this auto-generated app URL is correct. 
       Uri.parse("android-app://com.arabnewtech.a22.zoodrealstate/http/host/path") 
     ); 
     AppIndex.AppIndexApi.end(client2, viewAction); 
     client2.disconnect(); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     public PlaceholderFragment() { 
     } 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
      //TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
      // textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 
     } 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      return PlaceholderFragment.newInstance(position + 1); 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 2; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Case 0"; 
       case 1: 
        return "Case 1"; 
      } 
      return null; 
     } 
    } 
} 

Hier Stadt Bohnen:

package com.arabnewtech.a22.zoodrealstate.Beans; 

import java.io.Serializable; 

/** 
* Created by abozaid on 27/09/16. 
*/ 
public class CityBeans implements Serializable { 

     private String id; 
     private String name; 

     public String getId() { 
       return id; 
     } 

     public void setId(String id) { 
       this.id = id; 
     } 

     public String getName() { 
       return name; 
     } 

     public void setName(String name) { 
       this.name = name; 
     } 
} 

Hier Stadt Adapter:

package com.arabnewtech.a22.zoodrealstate.Adapters; 

/** 
* Created by abozaid on 28/09/16. 
*/ 
import java.util.ArrayList; 
import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import com.arabnewtech.a22.zoodrealstate.Beans.CityBeans; 
import com.arabnewtech.a22.zoodrealstate.Home; 
import com.arabnewtech.a22.zoodrealstate.R; 

public class CityAdapter extends ArrayAdapter<String> { 

    private Activity activity; 
    private ArrayList data; 
    CityBeans tempValues=null; 
    LayoutInflater inflater; 

    /************* CustomAdapter Constructor *****************/ 
    public CityAdapter(
      Home activitySpinner, 
      int textViewResourceId, 
      ArrayList objects 
    ) 
    { 
     super(activitySpinner, textViewResourceId, objects); 

     /********** Take passed values **********/ 
     activity = activitySpinner; 
     data  = objects; 

     /*********** Layout inflator to call external xml layout() **********************/ 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    // This funtion called for each row (Called data.size() times) 
    public View getCustomView(int position, View convertView, ViewGroup parent) { 
     Log.i("Iammmmmmmmmmmmmmmmmm","Herrrrrrrrrrrrrrr"); 
     /********** Inflate spinner_rows.xml file for each row (Defined below) ************/ 
     View row = inflater.inflate(R.layout.spinner_rows, parent, false); 

     /***** Get each Model object from Arraylist ********/ 
     tempValues = null; 
     tempValues = (CityBeans) data.get(position); 

     TextView label  = (TextView)row.findViewById(R.id.company); 
     TextView sub   = (TextView)row.findViewById(R.id.sub); 

     if(position==0){ 
      // Default selected Spinner item 
      label.setText("Please select Name"); 
      sub.setText(""); 
     } 
     else 
     { 
      // Set values for spinner each row 
      label.setText(tempValues.getId()); 
      sub.setText(tempValues.getName()); 

     } 

     return row; 
    } 
} 

Hier Fragment_home.xml

<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="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.arabnewtech.a22.zoodrealstate.Home$PlaceholderFragment"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/spinner1"> 

     <Spinner 
      android:id="@+id/cityID" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp"></Spinner> 

     <Spinner 
      android:id="@+id/zoneID" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_margin="5dp" 
      android:layout_height="wrap_content"></Spinner> 
    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/spinner2" 
     android:layout_below="@id/spinner1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <Spinner 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp"></Spinner> 

     <Spinner 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_margin="5dp" 
      android:layout_height="wrap_content"></Spinner> 
    </LinearLayout> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/ColorYellow" 
     android:layout_below="@+id/spinner2" 
     android:text="بحث"/>  

    <TextView 
     android:paddingTop="20dip" 
     android:paddingLeft="20dip" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/output" /> 

</RelativeLayout> 

Hier Spinner_Row:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="3dip" 
    > 
    <TextView 
     android:padding="3dip" 
     android:layout_marginTop="2dip" 
     android:textColor="@color/colorPrimary" 
     android:textStyle="bold" 
     android:id="@+id/company" 
     android:layout_marginLeft="5dip" 
     android:text="sfsdf" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <TextView 
     android:padding="2dip" 
     android:textColor="@color/ColorYellow" 
     android:layout_marginLeft="5dip" 
     android:id="@+id/sub" 
     android:text="sfsf" 
     android:layout_below="@+id/company" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</RelativeLayout> 

Log Katze heraus gesetzt:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arabnewtech.a22.zoodrealstate/com.arabnewtech.a22.zoodrealstate.Home}: java.lang.NullPointerException                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
                        at android.app.ActivityThread.access$700(ActivityThread.java:159) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
                        at android.os.Handler.dispatchMessage(Handler.java:99) 
                        at android.os.Looper.loop(Looper.java:176) 
                        at android.app.ActivityThread.main(ActivityThread.java:5419) 
                        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:1046) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
                        at dalvik.system.NativeStart.main(Native Method) 
                        Caused by: java.lang.NullPointerException 
                        at com.arabnewtech.a22.zoodrealstate.Home.setListData(Home.java:123) 
                        at com.arabnewtech.a22.zoodrealstate.Home.onCreate(Home.java:89) 
                        at android.app.Activity.performCreate(Activity.java:5372) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)  
                        at android.app.ActivityThread.access$700(ActivityThread.java:159)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)  
                        at android.os.Handler.dispatchMessage(Handler.java:99)  
                        at android.os.Looper.loop(Looper.java:176)  
                        at android.app.ActivityThread.main(ActivityThread.java:5419)  
                        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:1046)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)  
                        at dalvik.system.NativeStart.main(Native Method) 
+1

post die logcat Ausgang –

+0

sein _italic_ ich es am –

+0

können Sie debuggen und überprüfen, was ist der Inhalt dieser Zeile '' 'JSONArray jo_result = jo.getJSONArray (" Ergebnis ");' '' –

Antwort

0

Hier ist die Lösung für Ihre Spinner problem.This ist der Arbeitscode ist.

android-spinner-example

Sie sollten die URL mit Ihrem eigenen url und ändern Sie die onrespone Funktion nach Ihrer json Antwort haben zu ersetzen.

+0

Ja, es funktioniert mit neues Projekt, aber mit meinem Projekt funktioniert nicht ich weiß nicht warum !! –

+0

das einzige Problem, das ich gesehen habe, dass Ihr json respone.Manage Ihr json-Format in OnResponse-Funktion, wie ich bereits in der Antwort erwähne. – Adi

+0

Ich versuchte, ohne JSON-Daten für (Int i = 0; i <11; i ++) { endgültigen SpinnerModel sched = new SpinnerModel(); sched.setCompanyName ("Firma" + i); sched.setUrl ("http: \\ www." + I + ".com"); CustomListViewValuesArr.add (sched); } –

0

Ich glaube, ich habe das Problem nach der Replizierung Ihres Codes gefunden. In Ihrem public View getCustomView(int position, View convertView, ViewGroup parent) Methode des Code ...

Du aufblasen

View row = inflater.inflate(R.layout.fragment_home, parent, false); 

Aber es hat

View row = inflater.inflate(R.layout.spinner_row, parent, false); 
+0

Sie haben Recht, das ist das Problem, aber ich ersetzte es für etwas zu testen und an Spinner_row wieder und die gleiche Ausnahme, ich fühle das Problem mit der Vererbung von Basisaktivität, weil ich diesen Code ausprobiert mit sauberem Projekt und funktioniert gut –

+0

wenn Sie noch Problem haben, laden Sie es auf GitHub und geben Sie mir den Link. Ich werde sehen, was falsch ist –

+0

Okey, Bitte überprüfen Sie diesen Link [Github Link] (https://gist.github.com/Mohammed2050/7e04d8f76772c2dd53f0c2d06df3e7f9) –

Verwandte Themen