小编Kar*_* Ve的帖子

空对象引用上的android.content.Context.getPackageName()'

嗨,我正在使用实现接口的Fragments.

public class SigninFragment extends Fragment implements SigninInterface 
Run Code Online (Sandbox Code Playgroud)

片段类中接口的方法实现如下.

@Override
public void afterSubmitClicked(String userId, Bundle bundle) {

    Log.d(TAG,"Calling time afterSubmitClicked called"+bundle);

    if(!userId.equals("-1")){
        //Logged in successfully
        //Move to MusicHome

        Intent mIntent = new Intent(getActivity(),MusicHome.class);
        mIntent.putExtra("SigninFragment.user_details", bundle);
        startActivity(mIntent);

    }else{
        //Logging in failed
        //show error dialog
    }

}
Run Code Online (Sandbox Code Playgroud)

在执行AsynchronousTask(扩展AsyncTask)类之后调用此方法.

但是我崩溃了.并显示错误消息

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

logcat的

   02-14 16:37:04.648: E/AndroidRuntime(28177): Process: com.raaga.android, PID: 28177
02-14 16:37:04.648: E/AndroidRuntime(28177): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on …
Run Code Online (Sandbox Code Playgroud)

android fragment android-fragments

64
推荐指数
6
解决办法
10万
查看次数

在android中使用默认文件管理器打开文件夹内容

我正在我的 android 应用程序中处理 pdf 文件。在警报对话框中按“是”应该会在默认文件管理器应用程序中打开 pdf 文件位置。

我试过这个,但它总是打开一个选择器。即使它(ES文件资源管理器)打开“选择路径”对话框而不是应用程序中的文件夹作为访问文件夹的正常方式。

那么,是否可以在“默认文件管理器”中直接打开文件夹的内容?或者可以使用选择器打开,在选择 pdf 文件时,它应该从所选的应用程序中显示 pdf 文件选择器?。

以下是我为实现这一目标所做的尝试。

public void openFolder(String filePath)
    {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    Uri uri = Uri.parse(filePath.substring(0, filePath.lastIndexOf("/")));
    intent.setDataAndType(uri, "*/*");//tried with application/pdf and file/*
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    PackageManager pm = context.getPackageManager();
    List<ResolveInfo> apps = 
        pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    if (apps.size() > 0)
    startActivity(intent);//Intent.createChooser(intent, "Open folder"
    }
Run Code Online (Sandbox Code Playgroud)

编辑 我也试过 ACTION_PICK 。它定向到默认文件管理器的特定文件夹。但是从那里选择文件不会打开选择器(pdf 查看器列表对话框)。

android intentfilter android-intent android-file

8
推荐指数
0
解决办法
8611
查看次数

GoogleApiClient无法解析

我正在为我的项目使用Google App Indexing.

Newbee为此功能.我只是按照谷歌指南行.

使用API​​通知谷歌

在此页面中,要求创建GoogleApiClient的实例.我试过但是得到"GoogleApiClient无法解析类型"错误.

我已将以下库添加到我的项目中.

1.Google播放服务2.Google api客户端3.Google http api客户端

已安装的Google API

包括图书馆

错误是

错误图片

我该如何解决这个错误?

android google-api google-api-client

6
推荐指数
1
解决办法
1万
查看次数

使用 WorkManager 下载文件

我正在/尝试使用 WorkManager 和 MVVM 下载具有暂停和恢复功能的文件。

在这里,我正在使用 WorkManager 寻求暂停/恢复和下载百分比进度更新。所以我在这里分享我的课程。

MainActivity.kt

class MainActivity : AppCompatActivity() {

    lateinit var downloadViewModel : DownloaderViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
        downloadViewModel = ViewModelProviders.of(this).get(DownloaderViewModel::class.java)
        binding.viewmodel = downloadViewModel
        download_button.setOnClickListener({
                startDownload()
        })

        cancel_button.setOnClickListener({
            downloadViewModel.cancelDownloadWork(Constants.TAG_OUTPUT)
            WorkUtils.deleteFile(WorkUtils.getIsbn(Constants.TAG_OUTPUT))
        })

        downloadViewModel.mSavedWorkStatus.observe(this, Observer {

            it?.let {

            }
            if(it?.size!! > 0){
                val workStatus = it.first()
                val workState =  workStatus?.state
                downloadViewModel.updateDownloadWorkState(workState.toString())
                WorkUtils.makeStatusNotification(workState.toString(),this.applicationContext)
            }
        })

        pause_button.setOnClickListener({
            downloadViewModel.cancelDownloadWork(Constants.TAG_OUTPUT)
            val pausedAt = WorkUtils.getFileSize(WorkUtils.getIsbn(DOWNLOAD_URL))
            Log.d("paused at","paused at $pausedAt")
        })

        resume_button.setOnClickListener({
            val resumeFrom = WorkUtils.getFileSize(WorkUtils.getIsbn(DOWNLOAD_URL)) …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-workmanager

6
推荐指数
1
解决办法
7040
查看次数

Plus.PeopleApi.getCurrentPerson返回null

我目前正在使用我的应用中的Google Plus登录功能.

我创建了GoogleApiClient构建器,如下所示

Plus.PlusOptions options = new Plus.PlusOptions.Builder()
            .addActivityTypes("http://schemas.google.com/AddActivity")
            .build();

    myGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            // .addApi(Plus.API, Plus.PlusOptions.builder().build())
            .addApi(Plus.API, options)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .addScope(Plus.SCOPE_PLUS_PROFILE).build();
Run Code Online (Sandbox Code Playgroud)

和onConnected方法

@Override
public void onConnected(Bundle arg0) {
    // TODO Auto-generated method stub

    plusUtilities.ShowToast("Login successful");

    updateGPbutton();
    // hide progress DiaLog
    plusUtilities.DissmissPD();
    // it has deprecated
    // plusUtilities.ShowToast("Login to Google+ with " +
    // mPlusClient.getAccountName().toString());

    // upgraded class
    plusUtilities.ShowToast("Login to Google+ with "
            + Plus.AccountApi.getAccountName(myGoogleApiClient).toString());

    // deprecated
    // mPlusClient.loadPeople(this, "me");

    Plus.PeopleApi.load(myGoogleApiClient, "me");
    // plusUtilities.ShowPD("Fetching user data... ");

    // upgraded …
Run Code Online (Sandbox Code Playgroud)

android social-networking google-plus google-signin

5
推荐指数
1
解决办法
4626
查看次数

从使用 Kotlin 协程调用挂起函数的普通函数返回值

嗨,我在一个项目中使用 Kotlin 协程库。

下面的方法调用一个挂起函数,它返回一个布尔值。

fun isNetworkAvailable(context: Context?): Boolean {
            //return checkNetworkReachability(context)
            var isNetworkAvailable = false
            GlobalScope.launch(Dispatchers.Default) {
                isNetworkAvailable = GlobalScope.async<Boolean> {
                    checkNetwork()

                }.await()
            }
            return isNetworkAvailable

        }
Run Code Online (Sandbox Code Playgroud)

这里的 checkNetwork 是挂起函数。在执行之前,返回值被传递给调用者(视图/活动)。如果不将“isNetworkAvailable”设为挂起,我该如何实现?。

在 checkNetwork 方法中,检查可达性调用网络调用,如下所示。

private suspend fun checkNetwork() : Boolean {
            val value = GlobalScope.async<Boolean> {
                val isEastReachable = async { checkEastReachable() }
                if (!isEastReachable.await()) {
                    checkWestReachable()
                } else {
                    true
                }
            }

            return value.await()
        }
Run Code Online (Sandbox Code Playgroud)

子方法是

private suspend fun checkEastReachable(): Boolean = coroutineScope {

                withContext(Dispatchers.Default) {
                    repository.networkManager.callReachableEast()
                }
            }



private …
Run Code Online (Sandbox Code Playgroud)

android async-await kotlin kotlin-coroutines coroutinescope

4
推荐指数
1
解决办法
3634
查看次数

surfaceview 以拉伸视图的形式播放视频

我正在使用 mediaplayer.xml 播放视频文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/MainView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#4d4d4d"
android:gravity="center"
android:keepScreenOn="true"
android:orientation="vertical" >

<SurfaceView
   android:id="@+id/surfaceView"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
   />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

以下 MediaPlayerActivity 类使用 SurfaceView 和 MediaPlayer 在纵向模式下播放视频时,视频似乎拉伸了一个。我想垂直居中播放视频,不应占据全屏,然后在横向模式下应以全屏模式播放。

public class MediaPlayerActivity extends Activity implements OnCompletionListener,
OnErrorListener, OnInfoListener, OnBufferingUpdateListener,
OnPreparedListener, OnSeekCompleteListener, SurfaceHolder.Callback,
MediaController.MediaPlayerControl {

private MediaController controller;
Display currentDisplay;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private MediaPlayer mediaPlayer;

int videoWidth = 0;
int videoHeight = 0;
boolean readyToPlay = false;

private String streamingVideoUrl;

private ProgressDialog dialog;

public final  String …
Run Code Online (Sandbox Code Playgroud)

android android-video-player android-videoview

3
推荐指数
1
解决办法
6057
查看次数

操作栏和布局重叠

我在android中使用Actionbar.

在我的布局中,Actionbar正确显示.但我的片段布局与Actionbar重叠.见下图.在此输入图像描述

我的布局文件如下.

<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:background="@drawable/myapp_bg"
tools:context="${relativePackage}.${activityClass}" >

<LinearLayout 
    android:id="@+id/myapp_user_info_container"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:orientation="horizontal"
    android:background="@drawable/myapp_profile_bg"

    >
   <RelativeLayout 
       android:id="@+id/myapp_user_info_inner_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginTop="25dp"
       android:layout_marginBottom="25dp"
       >
       <com.mikhaellopez.circularimageview.CircularImageView
            android:layout_width="@dimen/myapp_circular_image_size"
            android:layout_height="@dimen/myapp_circular_image_size"
            android:layout_gravity="center"
            android:layout_marginLeft="10dp"
            android:src="@drawable/username" />

      <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginRight="5dp"
        android:layout_weight="2.30"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/myapp_menu_sidebar_user_mailid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="3dp"
            android:layout_weight="1.15"
            android:gravity="top"
            android:textColor="#ffffff"
            android:textSize="17sp" />

        <TextView
            android:id="@+id/myapp_menu_sidebar_user_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="3dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="1dp"
            android:layout_weight="1.15"
            android:gravity="bottom"
            android:textColor="#ffffff" />
    </LinearLayout>
   </RelativeLayout>

</LinearLayout>

<FrameLayout
    android:id="@+id/myapp_home_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:layout_marginTop="10dp" 
    android:layout_below="@+id/myapp_user_info_container"
    android:layout_marginBottom="20dp"
    />

<include
   android:id="@+id/myapp_footer_view_id"
   android:layout_width="match_parent"
   android:layout_height="40dp"
   android:layout_alignParentBottom="true"
   layout="@layout/myapp_footer" …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-activity android-actionbar

3
推荐指数
1
解决办法
4225
查看次数