2017-10-14 56 views
0

我尝试做一个ListView都刷新按钮,点击不知道为什么即时得到“无法解析法“getSystemService(java.lang.String中)”

public class MainActivity extends AppCompatActivity { 
    //private TextView txtPrayerTimes; 
    /* **********GPS********** */ 
    Context mContext; 

    /* **********ListView********** */ 
    ListView myPrayerList; 
    double latitude = 21.6001; 
    double longitude = 39.136; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //txtPrayerTimes = (TextView) findViewById(R.id.txtPrayerTimes); 
     //Button getTime = (Button) findViewById(R.id.getTime); 
     Button gpsBtn = (Button) findViewById(R.id.gpsBtn); 
     /* **********ListView********** */ 
     myPrayerList = (ListView) findViewById(R.id.myPrayerList); 


     /* **********GPS********** */ 
     mContext = this; 

     ///BUTTON 
     gpsBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if (ContextCompat.checkSelfPermission(mContext, 
         Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 

         && ActivityCompat.checkSelfPermission(mContext, 
         Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        ActivityCompat.requestPermissions(MainActivity.this, 
          new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 

       } else { 
        Toast.makeText(mContext, "You need have granted permission", Toast.LENGTH_SHORT).show(); 
        GPSTracker gps = new GPSTracker(mContext, MainActivity.this); 

        // Check if GPS enabled 

        if (gps.canGetLocation()) { 

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

         // \n is for new line 

         Toast.makeText(getApplicationContext(), 
           "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
        } else { 

         // Can't get location. 

         // GPS or network is not enabled. 

         // Ask user to enable GPS/network in settings. 

         gps.showSettingsAlert(); 
        } 
       } 
       //////listView 
       String[] prayerNamez; 
       String[] prayerTimez; 

       double timezone = (Calendar.getInstance().getTimeZone() 
         .getOffset(Calendar.getInstance().getTimeInMillis())) 
         /(1000 * 60 * 60); 
       PrayTime prayers = new PrayTime(); 

       prayers.setTimeFormat(prayers.Time12); 
       prayers.setCalcMethod(prayers.Makkah); 
       prayers.setAsrJuristic(prayers.Shafii); 
       prayers.setAdjustHighLats(prayers.AngleBased); 
       int[] offsets = { 0, 0, 0, 0, 0, 0, 0 }; // {Fajr,Sunrise,Dhuhr,Asr,Sunset,Maghrib,Isha} 
       prayers.tune(offsets); 

       Date now = new Date(); 
       Calendar cal = Calendar.getInstance(); 
       cal.setTime(now); 

       ArrayList prayerTimes = prayers.getPrayerTimes(cal, latitude, 
         longitude, timezone); 
       ArrayList prayerNames = prayers.getTimeNames(); 

       /* **********ListView********** */ 
       prayerNamez = new String[5]; 
       prayerTimez = new String[5]; 

       for (int i = 0,j = 0;(i+j) < prayerNames.size();i++){ 
        if ((i + j) == 1 || (i + j) == 4) 
         j++; 
        prayerNamez[i] = (String) prayerNames.get(i+j); 
        prayerTimez[i] = (String) prayerTimes.get(i+j); 
       } 
       ///ADAPTER 
       ItemAdapter itemAdapter = new ItemAdapter(this,prayerNamez,prayerTimez); 
       myPrayerList.setAdapter(itemAdapter); 
      } 
     }); 

    } 
} 

以上是我的主要活动,我的问题在代码的按钮附近有注释“ADAPTER”的地方。 项目适配器的代码将被显示在以下

package com.example.majidalashari.myfirstapp2; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 



class ItemAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 
    private String[] prayerNamez; 
    private String[] prayerTimez; 

// ItemAdapter(Context c, String[] N, String[] T){ 
//  prayerNamez = N; 
//  prayerTimez = T; 
//  mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
// } 

    ItemAdapter(View.OnClickListener c, String[] N, String[] T) { 

     prayerNamez = N; 
     prayerTimez = T;    /*vvvvvvvvvvvvvvvv*/ 
     mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
            /*^^^^^^^^^^^^^^^^*/ 
    } 

    @Override 
    public int getCount() { 
     return prayerNamez.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return prayerNamez[i]; 
    } 

    @Override 
    public long getItemId(int i) { 
     return i; 
    } 

    @Override 
    public View getView(int i, View View, ViewGroup parent) { 
     View v = mInflater.inflate(R.layout.my_prayer_detail,null); 
     TextView prayerNameTextView = v.findViewById(R.id.prayerNameTextView); 
     TextView prayerTimeTextView = v.findViewById(R.id.prayerTimeTextView); 

     String name = prayerNamez[i]; 
     String time = prayerTimez[i]; 

     prayerNameTextView.setText(name); 
     prayerTimeTextView.setText(time); 

     return v; 
    } 
} 
标记

,使用的意见,在这里我得到正好“getSystemService”在标题中提到的错误。

当我移动onClickListener Android Studio中的itemAdapter时,建议我将ItemAdapter中的参数从“Context”更改为“View.OnClickListener”,从而在标题中生成错误。

非常感谢您的帮助我是新来的java和android工作室,所以如果发现任何愚蠢的错误,请原谅我。

+1

将'View.OnClickListener'更改为'Context',您的已评论适配器构造函数正常 –

+1

可能重复[如何在非活动类中使用getSystemService?](https://stackoverflow.com/questions/4141555/如何使用,在非活动类的系统服务) –

+1

[Android从匿名类中获取活动](https://stackoverflow.com/questions/31903355/android-get-activity-from-within -anonymous-class) –

回答

0

当你做new View.OnClickListener() {你创建一个新的匿名内部类和this时使用它是一个实例的引用。

你应该改变

new ItemAdapter(this ,prayerNamez,prayerTimez); 

到:

new ItemAdapter(mContext ,prayerNamez,prayerTimez); 

,改变你的构造函数返回接受Context

+0

谢谢你的工作,你能详细说明mContext实际代表什么? –

+0

@MajidAlashari它在你的代码中......'mContext = this;'它是'MainActivity'的一个实例 – Oleg

+0

“this”被初始化在OnClickListerner()之外将引用主要活动而不是匿名内部类,谢谢再次! –

相关问题